package array;

/**
 * 给你一个由若干 0 和 1 组成的数组 nums 以及整数 k。如果所有 1 都至少相隔 k 个元素，则返回 true ；否则，返回 false 。
 * <p>
 * 示例 1：
 * 输入：nums = [1,0,0,0,1,0,0,1], k = 2
 * 输出：true
 * 解释：每个 1 都至少相隔 2 个元素。
 * <p>
 * 示例 2：
 * 输入：nums = [1,0,0,1,0,1], k = 2
 * 输出：false
 * 解释：第二个 1 和第三个 1 之间只隔了 1 个元素。
 *
 * @author jishenghuang
 * @version 20240412
 */
public class KLengthApart_1437 {
    /**
     * 返回是否每个1元素都相隔至少k
     *
     * @param nums the given integer array
     * @param k    the apart distance is at least k
     * @return true if each 1 element is apart for at least k
     */
    public static boolean kLengthApart(int[] nums, int k) {
        int n = nums.length;
        int prev = -1;

        for (int i = 0; i < n; ++i) {
            if (nums[i] == 1) {
                if (prev != -1 && i - prev - 1 < k) {
                    return false;
                }

                prev = i;
            }
        }

        return true;
    }

    public static void main(String[] args) {
        int[] nums = {1, 0, 0, 0, 1, 0, 0, 1};
        int k = 2;

        System.out.println(kLengthApart(nums, k));

        nums = new int[]{1, 0, 0, 1, 0, 1};
        k = 2;

        System.out.println(kLengthApart(nums, k));
    }
}